import openai
from openai import OpenAI
import os

# 初始化客户端
openai.api_key = os.getenv("OPENAI_API_KEY")  # 从环境变量中获取OpenAI API密钥
openai.base_url = 'https://open.xiaojingai.com/v1'  # 设置OpenAI API的基础URL（这里使用了自定义的URL）

# 创建OpenAI客户端实例，传入API密钥和基础URL
client = OpenAI(api_key=openai.api_key, base_url=openai.base_url)

# 大模型交互方式1（最常用）
# 发送聊天补全请求，指定使用GPT-3.5-turbo模型，并传入用户消息
# completion = client.chat.completions.create(
#     model="gpt-3.5-turbo",  # 指定使用的模型
#     messages=[
#         {"role": "user", "content": "你好，请描述一下华为的HarmonyOS NEXT"}  # 用户消息，包含角色和内容
#     ]
# )
# # 打印出补全响应的内容
# print(completion.choices[0].message.content)  # 输出GPT-3.5-turbo模型对用户消息的响应内容

# message角色设定
# response = client.chat.completions.create(
#     model="gpt-3.5-turbo",
#     messages=[
#         {"role": "user", "content": "假设你是一名资深的AI大模型专家，请帮我回答，什么是AI大模型？"},
#     ]
# )
# print(response.choices[0].message.content)

response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "你是一名幽默的脱口秀演员，回答问题的时候语言要幽默"},
        {"role": "user", "content": "请问什么是AI大模型？"},
    ]
)
print(response.choices[0].message.content)

# Q1 = "小米有6个气球，她又买了3袋，每袋有10个气球，请问她现在总共有多少个气球？"
# prompt_temp_cot = "请一步步思考并解决问题"
# response = client.chat.completions.create(
#     model="gpt-3.5-turbo",
#     messages=[
#         {"role": "system", "content": prompt_temp_cot},
#         {"role": "user", "content": Q1},
#     ]
# )
# print(response.choices[0].message.content)

# message之实现简易知识库
# 借助system role设置聊天背景信息，实现类似根据本地知识库回答问题的方法
# text = "西瓜老师，男，1983年6月16日出生于云南省大理市，" \
#        "2011年毕业于云南大学计算机专业，" \
#        "毕业后的西瓜老师在北京的一家著名的科技公司工作了12年"
# response = client.chat.completions.create(
#     model="gpt-3.5-turbo",
#     messages=[
#         {"role": "system", "content": text},
#         {"role": "user", "content": "今年是2024年，请问西瓜老师今年多大了？"},
#     ]
# )
# print(response.choices[0].message.content)

"""
借助本地知识库实现简易版多轮对话机器人
利用Chat模型进行多轮对话，若要构建一个本地知识库问答系统，一个直观易于实施的策略是：
首先，让大模型浏览本地知识库，并将其设定为System role的知识背景。有了这个背景，模型就能进行基于此知识库的问答。
"""
# 读取本地知识库
with open("../消失的她.txt", "r", encoding='utf-8') as f:
    chatCompletion = f.read()
# print(chatCompletion)
#
# response = client.chat.completions.create(
#     model="gpt-3.5-turbo",
#     messages=[
#         # {"role": "system", "content": "null"},
#         {"role": "system", "content": chatCompletion},
#         {"role": "user", "content": "你知道《消失的她》的电影里角色有哪些吗？"},
#     ]
# )
# print(response.choices[0].message.content)

"""
添加多轮对话
"""


def chat_with_model(messages):
    response = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=messages
    )
    return response.choices[0].message.content


# 测试函数
def chat_with_model(messages):
    response = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=messages
    )
    return response.choices[0].message.content


# 测试函数
def gpt_chat_with_model():
    # 初始问候
    messages = [
        {"role": "system", "content": chatCompletion},  ##添加本地知识库
        {"role": "user", "content": "你好！"},
        {"role": "assistant", "content": "你好！我是一个AIGC智能助理，有什么问题我可以帮助你？"}
    ]
    print(chat_with_model(messages))

    # 进行对话
     # 开始一个无限循环，直到用户输入'quit'
    while True:
        # 提示用户输入信息，并将用户输入的内容存储在变量user_input中
        user_input = input("老唐：")
        # 将用户的输入添加到messages列表中，作为一个新的消息
        messages.append({"role": "user", "content": user_input})
        # 调用chat_with_model函数，传入messages列表作为参数，并将返回的回复存储在变量assistant_response中
        assistant_response = chat_with_model(messages)
        # 将模型生成的回复添加到messages列表中，作为一个新的消息
        messages.append({"role": "assistant", "content": assistant_response})
        # 将模型生成的回复打印到控制台，前面加上“助理：”作为前缀
        print("助理：" + assistant_response)

        # 判断用户输入的内容是否为“quit”（不区分大小写），如果是，则跳出循环，结束对话
        if user_input.lower() == 'quit':
            break



# 调用gpt_chat_with_model()
gpt_chat_with_model()

# print(openai.api_key)
#
# client = OpenAI(api_key=openai.api_key, base_url=openai.base_url)
# print(client.models.list())

# def ask_gpt_question(prompt):
#     openai.api_key = os.getenv("OPENAI_API_KEY")
#     openai.base_url = 'https://open.xiaojingai.com/v1'
#
#     try:
#         response = openai.chat.completions.create(
#             model="gpt-4o",
#             messages=[
#                 {"role": "user", "content": prompt},
#             ],
#         )
#         return response.choices[0].message.content
#     except Exception as e:
#         return str(e)
#
#
# answer = ask_gpt_question("你是谁？")
# print(answer)

# client=OpenAI()
#
# completion=client.chat.completions.create(
#     model="gpt-3.5-turbo",
#     messages=[
#         {"role":"user","content":"Hello!"}
#     ]
# )
# print(completion.choices[0].message.content)
